package com.train.JUC;

import com.train.JUC.TicketsSales;

/**
 * 线程同步机制：synchronized
 * 在Java中，synchronized关键字用于控制多个线程对共享资源的访问，确保同一时刻只有一个线程可以执行某个代码块或方法，这被称为同步。synchronized保证了线程安全，防止了多个线程同时访问共享资源时可能引发的数据不一致问题。
 * 当一个线程进入一个synchronized代码块或方法时，它会首先尝试获取一个锁。如果锁已经被其他线程持有，则该线程会被阻塞，直到锁被释放。只有当锁被释放后，线程才能继续执行synchronized代码块或方法中的代码。
 * 这种机制确保了同一时刻只有一个线程可以执行synchronized代码块或方法，从而防止了多个线程同时访问共享资源。当第一个线程执行完synchronized代码块或方法中的所有代码并释放锁后，下一个等待该锁的线程才能获得锁并执行代码。
 * 因此，即使存在多个线程，使用synchronized关键字也能保证每次只有一个线程执行synchronized代码块或方法中的所有流程。这有助于维护数据的完整性和一致性，避免了因并发访问导致的竞态条件和其他并发问题。
 * 需要注意的是，synchronized虽然能够保证线程安全，但也可能导致性能下降，因为线程之间需要等待和释放锁。因此，在使用synchronized时应该谨慎考虑，避免过度同步导致不必要的性能开销。
 * */
public class RunThread {
    public static void main(String[] args) {
        TicketsSales ticketsSales = new TicketsSales(200);
        for (int i = 0; i < 140; i++) {
            new Thread(ticketsSales, "jack").start();
            new Thread(ticketsSales, "tom").start();
            new Thread(ticketsSales, "alice").start();
        }
    }
}